package br.com.srv.web.relatorio;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.DynaValidatorForm;

import br.com.srv.componentes.motorista.service.MotoristaService;
import br.com.srv.componentes.relatorio.estatisticamotorista.service.EstatisticaMotoristaService;
import br.com.srv.componentes.relatorio.estatisticamotorista.vo.EstatisticaMotoristaResultVO;
import br.com.srv.componentes.relatorio.estatisticaperimetro.vo.EstatisticaPerimetroResultVO;
import br.com.srv.model.MotoristaTO;
import br.com.srv.model.PeriodoTO;
import br.com.srv.util.DateHelper;
import br.com.srv.web.BaseAction;

public class EstatisticaMotoristaAction extends BaseAction {
	
	private final String PAGE_LISTA = "page_lista";

	public ActionForward preLoad(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		setarValores(request);
		
		DynaValidatorForm frm = (DynaValidatorForm) form;
		frm.set("dataInicial", DateHelper.getTodayAsString());
		frm.set("dataFinal", DateHelper.getTodayAsString());
		frm.set("horaInicial", "00:00:00");
		frm.set("horaFinal", "23:59:59");
		
		return mapping.findForward(PAGE_LISTA);

	}

	private void setarValores(HttpServletRequest request) throws Exception {
		MotoristaService motoristaService = (MotoristaService) getBeanSpring(MotoristaService.SERVICE_NAME);
		MotoristaTO motoristaTO = new MotoristaTO();
		motoristaTO.setClienteId(getPrincipal(request).getClienteId());
		List<MotoristaTO> cercas = motoristaService.buscarMotoristasAtivos(motoristaTO);
		request.setAttribute("motoristas", cercas);
	}
	
	public ActionForward consultar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		setarValores(request);
		
		MotoristaTO motoristaTO = getMotoristaTO(form, request);

		DynaValidatorForm frm = (DynaValidatorForm) form;	
		Map<String, Object> params = frm.getMap();
		
		String veiculoIdStr = (String)params.get("veiculoId");
		
		Integer veiculoId = null;
		if (!veiculoIdStr.equals("")) {
			veiculoId = new Integer(veiculoIdStr);
		}
		 
		PeriodoTO periodoTO = new PeriodoTO();
		periodoTO.setDataInicial((String)params.get("dataInicial"));
		periodoTO.setDataFinal((String)params.get("dataFinal"));
		periodoTO.setHoraInicial((String)params.get("horaInicial"));
		periodoTO.setHoraFinal((String)params.get("horaFinal"));

		List<String> erros = new ArrayList<String>();
		
		erros = validarEstatisticaMotorista(periodoTO, veiculoId, motoristaTO);
		if (!erros.isEmpty()) {
			saveActionErros(request, erros);
			return preLoad(mapping, form, request, response);			
		}		

		List<EstatisticaMotoristaResultVO> resultado = new ArrayList<EstatisticaMotoristaResultVO>(); 

		EstatisticaMotoristaService estatisticaMotoristaService =
			(EstatisticaMotoristaService)getBeanSpring(EstatisticaMotoristaService.SERVICE_NAME);
		
		//pesquisa por veículo
		if (motoristaTO.getId() == null) {		
			resultado = estatisticaMotoristaService.gerarDadosRelatorioByVeiculo(
					veiculoId, motoristaTO, periodoTO);
		}
		//pesquisa por motorista
		else {
			resultado = estatisticaMotoristaService.gerarDadosRelatorioByMotorista(
					motoristaTO, periodoTO);
		}
		
		request.setAttribute("resultado", resultado);
		
		return mapping.findForward(PAGE_LISTA);

	}
	
	private List<String> validarEstatisticaMotorista(PeriodoTO periodoTO, Integer veiculoId, MotoristaTO cercaTO) {
		List<String> erros = new ArrayList<String>();
		
		if (veiculoId == null && cercaTO.getId() == null) {
			erros.add("� necess�rio preencher ve�culo ou per�metro");
		} 
		
		if (periodoTO.getDataFinal() == null || periodoTO.getDataFinal().equals("")) {
			erros.add("Data Final obrigat�ria.");
		}
		
		if (periodoTO.getDataInicial() == null || periodoTO.getDataInicial().equals("")) {
			erros.add("Data Inicial obrigat�ria.");
		}
		
		if (periodoTO.getHoraFinal() == null || periodoTO.getHoraFinal().equals("")) {
			erros.add("Hora Final oobrigat�ria.");
		}
		
		if (periodoTO.getHoraInicial() == null || periodoTO.getHoraInicial().equals("")) {
			erros.add("Hora Inicial obrigat�ria.");
		}
		
		return erros;
	}
	
	/*
	 * Passa os dados do form e constr�i um VeiculoTO.
	 */
	@SuppressWarnings("unchecked")
	private MotoristaTO getMotoristaTO(ActionForm form, HttpServletRequest request) {
		DynaValidatorForm frm = (DynaValidatorForm) form;	
		Map<String, Object> params = frm.getMap();
		
		MotoristaTO motoristaTO = new MotoristaTO();
	
		Object motoristaId = params.get("motoristaId");
		if (motoristaId != null && !motoristaId.equals("")) {
			motoristaTO.setId(new Integer((String)motoristaId));	
		}
		
		motoristaTO.setClienteId(getPrincipal(request).getClienteIdBD());
		
		return motoristaTO;
	}
	
}
